// 这针对 axios 的二次封装
import axios, {type AxiosRequestConfig} from 'axios'

axios.defaults.baseURL = 'http://10.18.118.43:3002/'
// 请求拦截器
axios.interceptors.request.use((config:AxiosRequestConfig | any) => config);
// 相应拦截器
axios.interceptors.response.use(res=>{
    return res
},err=>{
    return Promise.reject(err)
})

// 类型定义,这里采用泛型
interface IHttp {
    get<T>(url:string, params?:unknown):Promise<T>;
    post<T>(url:string, params?:unknown):Promise<T>;
    // 这里定义get方法的请求ur和请求参数以及返回值的类型
}

// 类型的具体定义方式,这里就使用 IHttp 作为类型来规定请求的参数和返回值
const http : IHttp = {
    get(url, params) {
        return new Promise((resolve, reject) => {
            axios.get(url, {params})
                .then(res=>{
                    resolve(res.data)
                })
                .catch(err=>{
                    reject(err)
                })
        })
    },
    post(url, params) {
        return new Promise((resolve, reject) => {
            axios.post(url, {params})
                .then(res=>{
                    resolve(res.data)
                })
                .catch(err=>{
                    reject(err)
                })
        })
    },
}

// 然后这里把这http作为返回值导出使用
export default http;
